import _ from 'lodash';
import Moment from 'moment';

// 从备选项中找出与值相符的文本用于渲染
// 参数：当前值，备选数组对象
let value2label = function(val, opts) {
  let obj = opts.find((v) => {
    return v.value == val;
  });
  if (obj) return obj.label;
  return val;
};

// 为电话号码打码，防止非技术人员截图
// 参数：电话号码（可通过简单正则识别），部分不需要打码的布尔
let tel8star = function(tel, noReplace) {
  if (!/^(\d)/.test(tel)) return tel;
  if (noReplace) return tel;
  return tel
    .split('')
    .reduce((t, v, i, a) => {
      let min = Math.min(3, (a.length - 3) / 2);
      let max = Math.min(4, (a.length - 4) / 2);
      if (i >= min && i <= a.length - 1 - max) {
        t.push('*');
      } else {
        t.push(v);
      }
      return t;
    }, [])
    .join('');
}; //通常用于给电话号码打星号，不过有时可能因为某些原因（noReplace）又不打码了

// 使用指定字符填充表格空白单元格
// 参数：单元格原值，指定的字符，默认'--'
let EmptyTableCell = function(val, str) {
  if (str == undefined) str = '--';
  return val == '' ? str : val;
};

// 使用两个数值类型数据计算百分百，保留两位小数，并作为字符串输出，精度要求不高
// 参数：用作分子的数值，用作分母的数值
let percentage = function(a, b) {
  if (b === 0) return '--';
  let n = _.isNumber(a) ? a : 0;
  let m = _.isNumber(b) ? b : 0;
  let r = n / Math.max(m, 1);
  return _.round(r * 100, 2) + '%';
};

let momentFormat = function(val, strFormat, defStr) {
  let def = defStr || '--';
  if (!Moment(val).isValid()) {
    return val == '' ? def : val;
  }
  let format = strFormat || 'YYYY-MM-DD HH:mm:ss';

  return Moment(val).format(format);
};

let isNilOrEmpty = function(value) {
  if (_.isNull(value) || _.isUndefined(value)) return true;
  if (_.isString(value) && _.isEmpty(value)) return true;
  if (_.isNumber(value) && Number.isNaN(value)) return true;
  return false;
};

let getValueInOrder = function(obj, keys) {
  if (!_.isArray(keys)) return '--';
  for (let i = 0; i < keys.length; i++) {
    let value = _.get(obj, keys[i]);
    if (!isNilOrEmpty(value)) {
      return value;
    }
  }
  return '--';
};

export default {
  value2label,
  tel8star,
  EmptyTableCell,
  percentage,
  momentFormat,
  getValueInOrder,
};
